package main

import "fmt"

/*
	除自身以外数组的乘积
给你一个长度为 n 的整数数组 nums，其中 n > 1，返回输出数组 output ，
其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。


示例:
输入: [1,2,3,4]
输出: [24,12,8,6]
 */

func productExceptSelf(nums []int) []int {
	if nums == nil {
		return nil
	}
	length := len(nums)
	res := make([]int, length, length)
	// 保存左边的乘积
	res[0] = 1
	for i := 1; i < length; i ++ {
		res[i] = res[i - 1] * nums[i - 1]
	}
	// 保存右边的乘积
	right := 1    // 此时最右边位置右边没有数
	for i := length- 1; i >= 0; i -- {
		res[i] = right * res[i]
		right *= nums[i]
	}
	return res
}

func main() {
	fmt.Println(productExceptSelf([]int{1,2,3,4}))
}
